#ifndef __TIC10024_REG_H__
#define __TIC10024_REG_H__

/******************************************************************************
		头文件
******************************************************************************/
#include <stdint.h>
#include <stdbool.h>

#include "tic10024_port.h"

/******************************************************************************
	宏定义
******************************************************************************/
/** \brief	寄存器地址定义 */
#define REG_DEVICE_ID 0x01			/** \brief 	设备ID寄存器地址 */
#define REG_INT_STAT 0x02			/** \brief	中断状态寄存器地址 */
#define REG_CRC 0x03				/** \brief	CRC寄存器地址 */
#define REG_IN_STAT_MISC 0x04		/** \brief	输入状态寄存器地址 */
#define REG_IN_STAT_COMP 0x05		/** \brief	输入比较器状态寄存器地址 */
#define REG_CONFIG 0x1A				/** \brief	配置寄存器地址 */
#define REG_IN_EN 0x1B				/** \brief	输入使能寄存器地址 */
#define REG_CS_SELECT 0x1C			/** \brief	CS选择寄存器地址 */
#define REG_WC_CFG0 0x1D			/** \brief	湿电流配置寄存器0地址 */
#define REG_WC_CFG1 0x1E			/** \brief	湿电流配置寄存器1地址 */
#define REG_CCP_CFG1 0x20			/** \brief	清除当前轮询寄存器1地址 */
#define REG_THRES_COMP 0x21			/** \brief	阈值寄存器地址 */
#define REG_INT_EN_CFG0 0x24		/** \brief	全局中断使能控制寄存器地址 */

/** \brief	湿电流配置寄存器0和1寄存器位定义 */
#define WC_CFG0_WC_IN0_IN1_SHIFT 0U		/** \brief	WC_IN0和WC_IN1寄存器移位定义 */
#define WC_CFG0_WC_IN2_IN3_SHIFT 3U		/** \brief	WC_IN2和WC_IN3寄存器移位定义 */
#define WC_CFG0_WC_IN4_SHIFT 6U			/** \brief	WC_IN4寄存器移位定义 */
#define WC_CFG0_WC_IN5_SHIFT 9U			/** \brief	WC_IN5寄存器移位定义 */
#define WC_CFG0_WC_IN6_IN7_SHIFT 12U	/** \brief	WC_IN6和WC_IN7寄存器移位定义 */
#define WC_CFG0_WC_IN8_IN9_SHIFT 15U	/** \brief	WC_IN8和WC_IN9寄存器移位定义 */
#define WC_CFG0_WC_IN10_SHIFT 18U		/** \brief	WC_IN10寄存器移位定义 */
#define WC_CFG0_WC_IN11_SHIFT 21U		/** \brief	WC_IN11寄存器移位定义 */
#define WC_CFG1_WC_IN12_IN13_SHIFT 0U	/** \brief	WC_IN12和WC_IN13寄存器移位定义 */
#define WC_CFG1_WC_IN14_IN15_SHIFT 3U	/** \brief	WC_IN14和WC_IN15寄存器移位定义 */
#define WC_CFG1_WC_IN16_IN17_SHIFT 6U	/** \brief	WC_IN16和WC_IN17寄存器移位定义 */
#define WC_CFG1_WC_IN18_IN19_SHIFT 9U	/** \brief	WC_IN18和WC_IN19寄存器移位定义 */
#define WC_CFG1_WC_IN20_IN21_SHIFT 12U	/** \brief	WC_IN20和WC_IN21寄存器移位定义 */
#define WC_CFG1_WC_IN22_SHIFT 15U		/** \brief	WC_IN22寄存器移位定义 */
#define WC_CFG1_WC_IN23_SHIFT 18U		/** \brief	WC_IN23寄存器移位定义 */

/** \brief	配置寄存器位定义 */
#define CONFIG_INT_CONFIG_BIT (1U << 12)	/** \brief	中断配置寄存器位定义 */
#define CONFIG_TRIGGER_BIT (1U << 11)		/** \brief	触发配置寄存器位定义 */
#define CONFIG_POLL_EN_BIT (1U << 10)		/** \brief	轮询使能寄存器位定义 */
#define CONFIG_RESET_BIT (1U << 0)			/** \brief	复位寄存器位定义 */

#define CONFIG_POLL_TIME_SHIFT (1U)			/** \brief 轮询时间寄存器移位定义 */
#define CONFIG_POLL_ACT_TIME_SHIFT (5U)		/** \brief 轮询激活时间寄存器移位定义 */

/** \brief	阈值寄存器位定义 */
#define THRES_COMP_IN0_IN3_SHIFT (0U)		/** \brief	THRES_COMP_IN0_IN3寄存器移位定义 */
#define THRES_COMP_IN4_IN7_SHIFT (2U)		/** \brief	THRES_COMP_IN4_IN7寄存器移位定义 */
#define THRES_COMP_IN8_IN11_SHIFT (4U)		/** \brief	THRES_COMP_IN8_IN11寄存器移位定义 */
#define THRES_COMP_IN12_IN15_SHIFT (6U)		/** \brief	THRES_COMP_IN12_IN15寄存器移位定义 */
#define THRES_COMP_IN16_IN19_SHIFT (8U)		/** \brief	THRES_COMP_IN16_IN19寄存器移位定义 */
#define THRES_COMP_IN20_IN23_SHIFT (10U)	/** \brief	THRES_COMP_IN20_IN23寄存器移位定义 */

/** \brief	清除当前轮询寄存器1位定义 */
#define CCP_CFG1_CCP_IN0_BIT (1U << 0)		/** \brief	CCP_IN0寄存器位定义 */
#define CCP_CFG1_CCP_IN1_BIT (1U << 1)		/** \brief	CCP_IN1寄存器位定义 */
#define CCP_CFG1_CCP_IN2_BIT (1U << 2)		/** \brief	CCP_IN2寄存器位定义 */
#define CCP_CFG1_CCP_IN3_BIT (1U << 3)		/** \brief	CCP_IN3寄存器位定义 */
#define CCP_CFG1_CCP_IN4_BIT (1U << 4)		/** \brief	CCP_IN4寄存器位定义 */
#define CCP_CFG1_CCP_IN5_BIT (1U << 5)		/** \brief	CCP_IN5寄存器位定义 */
#define CCP_CFG1_CCP_IN6_BIT (1U << 6)		/** \brief	CCP_IN6寄存器位定义 */
#define CCP_CFG1_CCP_IN7_BIT (1U << 7)		/** \brief	CCP_IN7寄存器位定义 */
#define CCP_CFG1_CCP_IN8_BIT (1U << 8)		/** \brief	CCP_IN8寄存器位定义 */
#define CCP_CFG1_CCP_IN9_BIT (1U << 9)		/** \brief	CCP_IN9寄存器位定义 */
#define CCP_CFG1_CCP_IN10_BIT (1U << 10)	/** \brief	CCP_IN10寄存器位定义 */
#define CCP_CFG1_CCP_IN11_BIT (1U << 11)	/** \brief	CCP_IN11寄存器位定义 */
#define CCP_CFG1_CCP_IN12_BIT (1U << 12)	/** \brief	CCP_IN12寄存器位定义 */
#define CCP_CFG1_CCP_IN13_BIT (1U << 13)	/** \brief	CCP_IN13寄存器位定义 */
#define CCP_CFG1_CCP_IN14_BIT (1U << 14)	/** \brief	CCP_IN14寄存器位定义 */
#define CCP_CFG1_CCP_IN15_BIT (1U << 15)	/** \brief	CCP_IN15寄存器位定义 */
#define CCP_CFG1_CCP_IN16_BIT (1U << 16)	/** \brief	CCP_IN16寄存器位定义 */
#define CCP_CFG1_CCP_IN17_BIT (1U << 17)	/** \brief	CCP_IN17寄存器位定义 */
#define CCP_CFG1_CCP_IN18_BIT (1U << 18)	/** \brief	CCP_IN18寄存器位定义 */
#define CCP_CFG1_CCP_IN19_BIT (1U << 19)	/** \brief	CCP_IN19寄存器位定义 */
#define CCP_CFG1_CCP_IN20_BIT (1U << 20)	/** \brief	CCP_IN20寄存器位定义 */
#define CCP_CFG1_CCP_IN21_BIT (1U << 21)	/** \brief	CCP_IN21寄存器位定义 */
#define CCP_CFG1_CCP_IN22_BIT (1U << 22)	/** \brief	CCP_IN22寄存器位定义 */
#define CCP_CFG1_CCP_IN23_BIT (1U << 23)	/** \brief	CCP_IN23寄存器位定义 */

/******************************************************************************
	数据类型定义
******************************************************************************/
/** \brief	TIC10024状态寄存器结构体 */
typedef union
{
	uint8_t B;					/** \brief	状态寄存器数据 */
	struct
	{
		uint8_t DUMMY : 1;		/** \brief	预留位 */
		uint8_t POR : 1;		/** \brief	电源复位标志 */
		uint8_t SPI_FAIL : 1;	/** \brief	SPI失败标志 */
		uint8_t PRTY_FAIL : 1;	/** \brief	奇偶校验失败标志 */
		uint8_t SSC : 1;		/** \brief	开关状态变化标志 */
		uint8_t RES : 1;		/** \brief	保留位 */
		uint8_t TEMP : 1;		/** \brief	温度标志 */
		uint8_t OI : 1;			/** \brief	其它中断标志 */
	} STATUS;					/** \brief	状态寄存器位域 */
} tic10024_status;

/******************************************************************************
	全局变量声明
******************************************************************************/
extern tic10024_status g_tic10024_status;	/** \brief	TIC10024状态寄存器 */

/******************************************************************************
	全局函数声明
******************************************************************************/
/**
 * \brief 读取TIC10024寄存器
 *
 * 该函数通过SPI接口读取TIC10024的寄存器值。
 *
 * \param reg_addr 要读取的寄存器地址
 *
 * \return 读取到的寄存器值
 */
extern uint32_t tic10024_reg_read(uint8_t reg_addr);

/**
 * \brief 向TIC10024寄存器写入数据
 *
 * 该函数通过SPI接口向TIC10024芯片写入寄存器数据。
 *
 * \param reg_addr 寄存器地址
 * \param data 要写入的数据
 */
extern void tic10024_reg_write(uint8_t reg_addr, uint32_t data);

#endif // __TIC10024_REG_H__
	   /* end of file */
